package com.newear.util;

import android.util.Log;

import com.orhanobut.logger.Logger;

/**
 * Created by josan on 2016/7/12.
 * Log管理器
 * 所有方法为静态方法，不支持new对象
 */
public class MyLogger {
    /**
     * 默认tag
     */
    private final static String DEFAULT_TAG = "NewEar";

    /**
     * log等级常量
     */
    private final static int LEVEL_V  = 1;
    private final static int LEVEL_D  = 2;
    private final static int LEVEL_I  = 3;
    private final static int LEVEL_W  = 4;
    private final static int LEVEL_E  = 5;

    /**
     * 私有构造方法，不支持new 对象使用
     */
    private MyLogger() {
        throw new UnsupportedOperationException("所有方法都是静态方法，不支持实例化！");
    }

    /**
     * 初始化Logger
     * @param countMethod 现实方法的层数
     */
    public static void init(int countMethod) {
        Logger.init().methodCount(countMethod);
    }

    public static void v(String msg) {
        v(DEFAULT_TAG, msg);
    }

    public static void v(String tag, String msg) {
        print(LEVEL_V, tag, msg);
    }

    public static void d(String msg) {
        d(DEFAULT_TAG, msg);
    }

    public static void d(String tag, String msg) {
        print(LEVEL_D, tag, msg);
    }

    public static void i(String msg) {
        i(DEFAULT_TAG, msg);
    }

    public static void i(String tag, String msg) {
        print(LEVEL_I, tag, msg);
    }

    public static void w(String msg) {
        w(DEFAULT_TAG, msg);
    }

    public static void w(String tag, String msg) {
        print(LEVEL_W, tag, msg);
    }

    public static void e(String msg) {
        e(DEFAULT_TAG, msg);
    }

    public static void e(String tag, String msg) {
        print(LEVEL_E, tag, msg);
    }

    /**
     * 底层的打印log方法实现
     */
    private static void print(int level, String tag, String msg) {
        if (!MyConstant.LOG_DEBUG) {
            return;
        }
        if (!Validator.isEffective(tag)) {
            tag = DEFAULT_TAG;
        }
        if (msg == null) {
            msg = "log = null!";
        }
        switch (level) {
            case LEVEL_V:
                //Log.v(tag, msg);
                Logger.t(tag).v(msg);
                break;
            case LEVEL_I:
                //Log.i(tag, msg);
                Logger.t(tag).i(msg);
                break;
            case LEVEL_D:
                //Log.d(tag, msg);
                Logger.t(tag).d(msg);
                break;
            case LEVEL_W:
                //Log.w(tag, msg);
                Logger.t(tag).w(msg);
                break;
            case LEVEL_E:
                //Log.e(tag, msg);
                Logger.t(tag).e(msg);
                break;
            default:
                Log.e(tag, msg);
                break;
        }

    }

}
